import moment from 'moment'
import Big from 'big.js'
// bottomProfitRate是应收应付 利润分析表专用的 不能参与合计累加 是后端计算来的
export function ExportExcel2(tableData, newData, name, headerData, time, searchForm, pageData, totalWord) { // table为表格数据,name为导出文件名,headerData为表头名，//callback为导出完毕回调,方便你知道导出完成了(可根据自己需求决定是否需要)
  console.log(newData, 'newData')
  var sheetName = JSON.parse(JSON.stringify(name))
  const times = searchForm.filter(item => (item.type == 'time' || item.type == 'time2') && item.isTime)
  const timeData = JSON.parse(JSON.stringify(times))
  times.forEach(item => {
    if (!pageData[item.prop]) {
      timeData.splice(timeData.indexOf(item), 1)
    }
  })
  let timeStr = ''
  if (timeData.length > 0) {
    for (let i = 0; i < timeData.length; i++) {
      if (timeData[i].length > 0) {
        timeStr += '\xa0\xa0\xa0\xa0\xa0\xa0' + timeData[i].label + ':' + '\xa0' + pageData[timeData[i].prop][0].substring(0, 16) + '\xa0' + '至' + '\xa0' + pageData[timeData[i].prop][1].substring(0, 16)
      }
    }
  }
  console.log(timeStr)
  // const time1 = timeData.length > 0 ? timeData[0].label + ':' + '\xa0' + pageData[timeData[0].prop][0].substring(0, 16) + '\xa0' + '至' + '\xa0' + pageData[timeData[0].prop][1].substring(0, 16) : ''
  // const time2 = timeData.length > 1 ? timeData[1].label + ':' + '\xa0' + pageData[timeData[1].prop][0].substring(0, 16) + '\xa0' + '至' + '\xa0' + pageData[timeData[1].prop][1].substring(0, 16) : ''
  // const time3 = timeData.length > 2 ? timeData[2].label + ':' + '\xa0' + pageData[timeData[2].prop][0].substring(0, 16) + '\xa0' + '至' + '\xa0' + pageData[timeData[2].prop][1].substring(0, 16) : ''
  let tableInnerHTML = ''
  var bodyData = tableData // 这里对应是表格数据，我们只需要传过来即可
  console.log(bodyData, 'bodyData')
  // 拼接完全使用thead、tbody、tr、td、th，并且相应的tr、th、td里可以写一些类似colspan(决定占几列)
  // rowspan(决定占几行)的属性、可以用作合并行、合并列等高级操作
  // tableInnerHTML += '<tbody><tr>' // 头部部分开始拼接！
  // tableInnerHTML += `<td align='center' colspan=${headerData.map(item => item.label).length}
  // style='border-right:0.5px solid #666;'>` +
  // pageId +
  // '</td>'
  // tableInnerHTML += '</tr></tbody>' // 头部部分结束
  tableInnerHTML += '<thead>'
  tableInnerHTML += '<tr>'
  tableInnerHTML += `<td align='center' colspan=${headerData.map(item => item.label).length}
  style='border-right:0.5px solid #666;font-size:24px;height:50px'>` +
    name +
    '</td>'
  tableInnerHTML += '</tr>' // 头部部分结束
  tableInnerHTML += '<tr>' // 头部部分开始拼接！
  tableInnerHTML += `<th colspan=${headerData.map(item => item.label).length}
    				style='border:0.5px solid #666;height:40px;''>` + timeStr + '\xa0\xa0\xa0\xa0\xa0\xa0' + '导出日期:' + '\xa0' + time

  '</th></tr>'
  tableInnerHTML += '<tr>'
  headerData.map(item => item.label).forEach(item => {
    tableInnerHTML += "<th rowspan='1' style='border:0.5px solid #666;height:30px;'>" +
      item + '</th>'
  })
  tableInnerHTML += '</tr></thead>' // 头部部分结束
  tableInnerHTML += '<tbody>' // 身体部分开始
  bodyData.forEach(item => {
    tableInnerHTML += '<tr>'
    headerData.forEach(ele => {
      if (ele.position == 'right') {
        tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;mso-number-format: \@;'>" + (item[ele.prop] == null ? '' : `${item[ele.prop]}`) + '</td>'
      } else if (ele.position == 'left') {
        tableInnerHTML += "<td x:str align='left' style='border:0.5px solid #666;height:30px;mso-number-format: \@;'>" + (item[ele.prop] == null ? '' : `${item[ele.prop]}`) + '</td>'
      } else {
        tableInnerHTML += "<td x:str align='center' style='border:0.5px solid #666;height:30px;mso-number-format: \@;'>" + (item[ele.prop] == null ? '' : `${item[ele.prop]}`) + '</td>'
      }
    })
    tableInnerHTML += '</tr>'
  })
  tableInnerHTML += '</tbody>' // 身体结束
  if (totalWord.length > 0) {
    //  合计
    tableInnerHTML += '<tr>'
    headerData.forEach((ele, index) => {
      if (totalWord.indexOf(ele.prop) != -1) {
        if (name == '订单利润分析表') {
          if (ele.label == '订单金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomTaxAllPrice) + '</td>'
          }
          if (ele.label == '成本') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomCost) + '</td>'
          }
          if (ele.label == '利润') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomProfit) + '</td>'
          }
          if (ele.label == '利润率(%)') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomProfitRate) + '</td>'
          }
        } else if (name == '应收账款明细表' || name == '应付账款明细表') {
          if (ele.label == '含税总金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomTaxAllPrice) + '</td>'
          }
          if (ele.label == '已开票金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomHasReceiptPrice) + '</td>'
          }
          if (ele.label == '未开票金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomUnReceiptPrice) + '</td>'
          }
          if (ele.label == '已收款金额' || ele.label == '已付款金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomHasPrice) + '</td>'
          }
          if (ele.label == '未收款金额' || ele.label == '未付款金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomUnPrice) + '</td>'
          }
          if (ele.label == '附加收款金额' || ele.label == '附加付款金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomOtherPrice) + '</td>'
          }
          if (ele.label == '附加已收金额' || ele.label == '附加已付金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomHasOtherPrice) + '</td>'
          }
          if (ele.label == '累计收款金额' || ele.label == '累计付款金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomTotalPrice) + '</td>'
          }
          if (ele.label == '累计已收金额' || ele.label == '累计已付金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomTotalHasPrice) + '</td>'
          }
          if (ele.label == '累计未收款金额' || ele.label == '累计未付款金额') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (newData.bottomTotalUnPrice) + '</td>'
          }
        } else {
          if (ele.position == 'right') {
            tableInnerHTML += "<td x:str align='right' style='border:0.5px solid #666;height:30px;'>" + (sum(bodyData.map(item2 => item2[ele.prop]))) + '</td>'
          } else if (ele.position == 'left') {
            tableInnerHTML += "<td x:str align='left' style='border:0.5px solid #666;height:30px;'>" + (sum(bodyData.map(item2 => item2[ele.prop]))) + '</td>'
          } else {
            tableInnerHTML += "<td x:str align='center' style='border:0.5px solid #666;height:30px;'>" + (sum(bodyData.map(item2 => item2[ele.prop]))) + '</td>'
          }
        }
      } else if (index == 0 && totalWord.indexOf(ele.prop) == -1) {
        tableInnerHTML += "<td x:str align='center' style='border:0.5px solid #666;height:30px;'>" + '合计' + '</td>'
      } else {
        tableInnerHTML += "<td x:str align='center' style='border:0.5px solid #666;height:30px;'>" + '' + '</td>'
      }
    })
    tableInnerHTML += '</tr>'
  }
  tableInnerHTML += '</tbody>' // 身体结束
  // ------------OK，到此为止拼接工作做完，也就是基本的数据已经被拼接成表格了--------------------
  // tip开始(下面还有个tip结束的位置)
  /* -------从tip开始到tip结束的过程是判断浏览器类型步骤，做兼容性处理！对于你来说你完全可以不用
             深入理解这里面的逻辑，直接复制到自己的项目里去，不会存在任何浏览器兼容性的问题！*/
  function getExplorer() {
    var explorer = window.navigator.userAgent
    if (explorer.indexOf('MSIE') >= 0) {
      return 'ie' // ie
    } else if (explorer.indexOf('Firefox') >= 0) {
      return 'Firefox' // firefox
    } else if (explorer.indexOf('Chrome') >= 0) {
      return 'Chrome' // Chrome
    } else if (explorer.indexOf('Opera') >= 0) {
      return 'Opera' // Opera
    } else if (explorer.indexOf('Safari') >= 0) {
      return 'Safari' // Safari
    }
  }
  // function replaceDateString(str) {
  //   if (str.includes('-')) {
  //     return str.replace(/-/g, '&#45;')
  //   }
  //   return str
  // }

  if (getExplorer() !== 'Safari' && name.substr(-1, 4) !== '.xls') {
    sheetName += '.xls'
    name = name + moment(new Date()).format('YYYY-MM-DD')
    name += '.xls'
  }
  //   if (getExplorer() === 'ie') {
  //     var curTbl = table
  //     var oXL = new ActiveXObject('Excel.Application')
  //     var oWB = oXL.Workbooks.Add()
  //     var xlsheet = oWB.Worksheets(1)
  //     var sel = document.body.createTextRange()
  //     sel.moveToElementText(curTbl)
  //     sel.select()
  //     sel.execCommand('Copy')
  //     xlsheet.Paste()
  //     oXL.Visible = true
  //     try {
  //       var fname = oXL.Application.GetSaveAsFilename('Excel.xls', 'Excel Spreadsheets (*.xls), *.xls')
  //     } catch (e) {
  //       print('Nested catch caught ' + e)
  //     } finally {
  //       oWB.SaveAs(fname)
  //       // oWB.Close(savechanges = false);
  //       oXL.Quit()
  //       oXL = null
  //       idTmr = setInterval(Cleanup(), 1)
  //     }
  //   } else {
  tableToExcel(tableInnerHTML, name, sheetName) /* 在这调用下面的一个方法，传入拼接完成的表格，文件名，回调函数。该方法是干嘛的请往下看*/

  // tip结束
} // 此括号结束，我们自己封装的exportExcel方法也结束了！90%的逻辑完成了！

/* 下面的两个函数对于你来说你也完全不用深入理解里面的逻辑，你只要知道，他是在帮助你做转换，帮助你
  将拼接好的HTML字符串模板真正地转换并且输出到Excel里面去，直接当成固定书写方法，直接拿来用即可*/
// function Cleanup() {
//   window.clearInterval(idTmr)
// }
// 求和
// function sum(arr) {
//   var sum = 0
//   for (var i = 0; i < arr.length; i++) {
//     sum += Number(arr[i])
//   }
//   return sum
// }\
function sum(arr) {
  console.log(arr, 999999999)
  var sum = 0
  for (var i = 0; i < arr.length; i++) {
    // if (arr[i].indexOf(',') != -1) {
    //   arr[i] = arr[i].replace(/,|，/g, '')
    // }
    sum = new Big(sum).plus(Number(arr[i])).toString()
  }
  return sum
}
const tableToExcel = (function() {
  var template = '<html><head><meta charset="UTF-8"></head><body><table>{table}</table></body></html>'
  const format = function(s, c) {
    return s.replace(/{(\w+)}/g, function(m, p) { return c[p] })
  }

  return function(table, name, sheetName) {
    const ctx = { worksheet: sheetName || 'Worksheet', table: table }

    const blob = new Blob([format(template, ctx)])
    const a = document.createElement('a')
    a.href = URL.createObjectURL(blob)
    a.download = name // 这里这个name就是对应的文件名！
    a.click()
    a.remove()
    // callback('success') /* 这里调用我们自己传入的回调方法，这样导出Excel完成后你就能在外面知道导出完毕，并且再往下做自己其他的逻辑*/
  }
})()
// export default ExportExcel // 导出自己封装的exportExcel方法
